package wahadlo.math;

/**
 * Klasa reprezentuje funkcję położenia (wychylenia) wahadła w czasie.<br/>
 * x(t)=A<sub>0</sub>e<sup>-&beta;t</sup>cos(&omega;t + &phi;)
 * 
 * @author Koziołek
 * 
 */
public class Location implements Function {

	/**
	 * Wychylenie początkowe
	 */
	private Double a0;
	/**
	 * współczynnik tłumienia
	 */
	private Double beta;
	/**
	 * długość wahadła
	 */
	private Double length;

	/**
	 * Konstruktor o zasięgu pakietu. Obiekt nie powinien być tworzony
	 * bespośrednio, ale za pomocą {@link FunctionFactory| fabryki}.
	 * 
	 * @param a0
	 *            wychylenie początkowe
	 * @param beta
	 *            współczynnik tłumienia
	 * @param length
	 *            długość wahadła
	 */
	Location(Double a0, Double beta, Double length) {
		this.a0 = a0;
		this.beta = beta;
		this.length = length;
	}

	/* (non-Javadoc)
	 * @see wahadlo.math.Function#getValue(java.lang.Double[])
	 */
	public Double getValue(Double... points) {
		Double t;
		if (points != null && points.length > 0) {
			t = points[0];
		} else {
			throw new NullPointerException();
		}
		Double a0Value = a0 * Math.pow(Math.E, (-beta * t));
		Double cosValue = Math.cos((2*Math.PI/Math.sqrt(length / Function.G)) * t);
		return cosValue * a0Value;
	}
}
